package reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

/*

使用有参构造器实例化对象
 */
public class ReflectDemo3 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        System.out.println("原始的实例化对象：");
        Person p=new Person("李四");
        System.out.println(p);

        System.out.println("反射机制实例化对象:");
        Class cls=Class.forName("reflect.Person");

        /*
            反射对象:
            Class           :类对象，它的每一个实例用于表示一个类
            Package         :包对象，它的每一个实例用于表示一个包的信息
            Method          :方法对象，它的每一个实例用于表示一个方法
            Constructor     :构造器对象，它的每一个实例用于表示一个构造器

            Class提供的方法:
            Constructor getConstructor(Class... parameterTypes)
            该方法可以获取Class所表示的类的一个特定的构造器
         */

        //参数是Person类中只有一个参数的构造器Public Person(String name){}
        //不传参获取的是默认的无参构造器Public Person(){}
        Constructor con = cls.getConstructor(String.class);

        Object o = con.newInstance("李四");
        System.out.println(o);

        Constructor con1 = cls.getConstructor(String.class, int.class);//按照参数列表顺序传参
        Object o1 = con1.newInstance("王五", 66);
        System.out.println(o1);
    }
}
